from flask import get_flashed_messages, request, flash, render_template, redirect, url_for, session
from models.usuario import metadata, Usuario
from models.database import db_session
import sys

from models.faseManager import FaseManager
from models.estadoFaseManager import EstadoFaseManager
from models.proyectoManager import ProyectoManager
from models.estadoProyectoManager import EstadoProyectoManager

faseMgr = FaseManager()
proyectoMgr = ProyectoManager()
estadofaseMgr = EstadoFaseManager()
estadopytoMgr = EstadoProyectoManager()
"""
Clase que contiene los metodos relacionados con la inicializacion y finalizacion de proyectos
"""
        
def inicializarProyecto():
    """ Metodo encargado de inicializar una proyecto """
    if request.method == "GET":
        if session['idproyecto']:
            idproyecto = session['idproyecto']
            proyecto = proyectoMgr.getProyecto(idproyecto)
            habilitarBoton = 0
            if proyecto.idestadoproyecto != 1:
                habilitarBoton = 1
            return render_template("inicializarProyecto.html",idproyecto = idproyecto, proyecto = proyecto, habilitarBoton = habilitarBoton)
        else:
            flash(u"Seleccionar un proyecto antes de realizar la operaci\u00f3n", "error")  
            return redirect(url_for("configurarProyecto", action = "inicializarProyecto"))
    if request.method == "POST":
        idproyecto = request.form["idproyecto"]
        proyecto = proyectoMgr.getProyecto(idproyecto)
        estadoproyectovalido = estadopytoMgr.getEstadoProyecto(1) #pendiente        
        estadoproyecto = estadopytoMgr.getEstadoProyecto(2) #iniciado
        estadofase = estadofaseMgr.getEstadoFase(2) #abierta
        habilitarBoton = 0
        
        if proyecto.idestadoproyecto == estadoproyectovalido.idestadoproyecto:
            fases = faseMgr.getFasesPorProyecto(idproyecto)
#             for fase in fases:
#                 fase.estadofase = estadofase      
#                 faseMgr.guardarFase(fase)    
            for fase in fases:
                if (fase.numero == 1):
                    fase.estadofase = estadofase
                    faseMgr.guardarFase(fase)
            proyecto.estadoproyecto = estadoproyecto     
            proyectoMgr.guardarProyecto(proyecto)
            habilitarBoton = 1
            mensajes = get_flashed_messages(with_categories= True)
            categoria, mensaje = mensajes[0]
            if categoria == "error":
                flash(mensaje, categoria)
            else:
                flash("Proyecto inicializado exitosamente.");
        else:
            flash("El proyecto ya se encuentra inicializado.", "error")
        return redirect(url_for("inicializarProyecto", idproyecto = idproyecto, proyecto = proyecto, habiltarBoton = habilitarBoton))


def finalizarProyecto():
    """ Metodo encargado de finalizar un proyecto """
    if request.method == "GET":
        if session['idproyecto']:
            idproyecto = session['idproyecto']
            proyecto = proyectoMgr.getProyecto(idproyecto)
            habilitarBoton = 0
            if proyecto.idestadoproyecto == 1 or proyecto.idestadoproyecto == 3:
                habilitarBoton = 1
            return render_template("finalizarProyecto.html",idproyecto = idproyecto, proyecto = proyecto, habilitarBoton = habilitarBoton)
        else:
            flash(u"Seleccionar un proyecto antes de realizar la operacion", "error")  
            return redirect(url_for("configurarProyecto", action = "finalizarProyecto"))
    if request.method == "POST":
        idproyecto = request.form["idproyecto"]
        proyecto = proyectoMgr.getProyecto(idproyecto)
        estadoproyecto = estadopytoMgr.getEstadoProyecto(3) #finalizado
        estadofasevalido = estadofaseMgr.getEstadoFase(3) # cerrada
        estadoproyectovalido = estadopytoMgr.getEstadoProyecto(2) #iniciado
        habilitarBoton = 0
        aux = 0
        fases = proyecto.fases
        for fase in fases:
            if(fase.estadofase.idestadofase != estadofasevalido.idestadofase):
                aux = 1
        if proyecto.idestadoproyecto == estadoproyectovalido.idestadoproyecto and aux == 0:
            proyecto.estadoproyecto = estadoproyecto      
            proyectoMgr.guardarProyecto(proyecto)
            habilitarBoton = 1
            mensajes = get_flashed_messages(with_categories= True)
            flash("Proyecto finalizado exitosamente")
        else:
            if (aux == 1):
                flash("El proyecto no puede ser finalizado, verifique que todas las fases estan cerradas.")
            else:
                flash("El proyecto ya se encuentra finalizado.")
        return redirect(url_for("finalizarProyecto", idproyecto = idproyecto, proyecto = proyecto, habiltarBoton = habilitarBoton))
 
